#ifndef AI_AGENT_H_INCLUDED
#define AI_AGENT_H_INCLUDED
#include "Behaviour.h"
#include "Vec3.h"
#include "PointOfInterest.h"
#include "Graph.h"
#include <vector>
#include <string>
#include <map>

class AiState;

class AiAgent
{
public:
	AiAgent();
	AiAgent(Vec3f pos, int id, std::string& proffesion);
	~AiAgent();
	void Update();
	void Draw();
	void LoadGrapthAndPoi(const std::string file);

	void SetAiState(AiState* newState);
	void SetPath(std::vector<int>& newPath);
	void SetAcc(Vec3f newAcc);
	void SetVel(Vec3f newVel);
	void SetTextureTag(const std::string& newTag);
	std::vector<int>& GetPath();

	//Return Functions
	Graph* ReturnGraph() { return &m_Graph; }
	int ReturnId() { return m_id; }
	Vec3f& ReturnPos() { return m_Pos; }
	Vec3f& ReturnVel() { return m_Vel; }
	Vec3f& ReturnAcc() { return m_Acc; }
	std::vector<int>& ReturnPath() { return m_Path; }
	std::vector<PointOfInterest>& ReturnPoIVec() { return m_PoIvec; }
	std::string& ReturnProfession() {return m_Profession; }

private:
	Vec3f m_Acc;
	Vec3f m_Pos;
	Vec3f m_Vel;
	Vec3f m_Heading;
	int m_id;
	AiState* m_State;
	std::string m_Profession;
	std::string m_TextureTag;

	Graph m_Graph;
	std::vector<PointOfInterest> m_PoIvec;
	std::vector<int> m_Path;
};

#endif